import { getToken, setToken, removeToken } from '@/utils/auth'
import { loginAPI, getUserProfileAPI, getUserInfoAPI} from '@/api'
const getDefaultState = () => {
  return {
    token: getToken(),  //token字符串（不带Bearer前缀）
    userInfo: {} // 用户信息对象
  }
}
const state = getDefaultState()

const mutations = {
  // 重置state
  RESET_STATE: (state) => {
    removeToken()
    Object.assign(state, getDefaultState())
    
  },
  // 保存token
  SET_TOKEN (state,val) {
    state.token = val
    setToken(val)
  },
  // 保存用户信息
  SET_USER (state, val) {
    state.userInfo = val
  }
}

const actions = {
  // 登录
 async loginActions ({commit}, loginForm) {
  try {
    const res = await loginAPI(loginForm  )
    // 我们只需要token, 保存到上面的vuex中
    commit('SET_TOKEN', res.data)
    // 逻辑页面还在接收数组, 外面写成功/失败的逻辑, 所以这里要把数组返回出去
    // return到actions调用的地方(login/index.vue)
    return res
  } catch (err) {
    return Promise.reject(err)
  }
  },
  // 获取用户信息
  async getUserInfoActions ({commit}) {
    const res = await getUserProfileAPI ()
    const res2 = await getUserInfoAPI (res.data.userId)
    console.log(res)
    commit('SET_USER', {...res.data, ...res2.data})
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}